<?php
/**
 * location actions.
 *
 * @package    costabravasfr
 * @subpackage location
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 12474 2008-10-31 10:41:27Z fabien $
 */
class locationActions extends sfActions
{
	//Itera sobre las imagenes para devolver su numero, dado un nombre
	public function numeroFotos($nom){
	
		$this->logMessage(sfConfig::get('app_fotos_path').$nom, "info");
		if ($gestor = opendir(sfConfig::get('app_fotos_path').$nom)) {
			$a = 0;
			/* Esta es la forma correcto de iterar sobre el directorio. */
			while (false !== ($archivo = readdir($gestor))) {
				if(preg_match('/[0-9].jpg/', $archivo) && strcmp($archivo, 'x')!=0 ){
				//if (strpos($archivo, '.jpg',1) && strcmp($archivo, $nom.'.jpg')!=0 && strcmp($archivo, $nom."thumb.jpg")!=0) {
					$a++;
					//$this->logMessage($archivo, "info");
			  }							      
			}							
			closedir($gestor);
		}
		return $a;	
	}


  public function executeIndex(sfWebRequest $request){
	$query = Doctrine::getTable('ViviendasAlquileres')->createQuery('a');
    $this->viviendas_alquileres_list = $query->execute();
	 
	$this->nbViviendas = $query->count();
  }
  
  public function executeActiveLocations(sfWebRequest $request){
  
	$query = Doctrine::getTable('ViviendasAlquileres')->createQuery('a');
  
    //$this->pager = new sfDoctrinePager('ViviendasAlquileres',10);
	//$this->pager->setQuery($query);
	//$this->pager->setPage($request->getParameter('page', 1));
	//$this->pager->init();
    
	
	$this->viviendas_alquileres_list = $query->execute();
	$this->nbViviendas = $query->count();
  }

  public function executeShow(sfWebRequest $request){
	$this->logMessage("Carpeta fotos: ".sfConfig::get('app_fotos_path'), "info"); 
 	$this->requestForm = new RecepcionEmailsForm();
	
    $this->vivienda = $this->getRoute()->getObject();
	
	
	//La marcamos como visitada
	$this->getUser()->addViviendaToVisited($this->vivienda->id);
	$this->logMessage("Numero de visitadas: ".$this->getUser()->numberVisited(), "info");
	$this->logMessage("Favorites: ".$this->getUser()->getFavoritesString(), "info");
	$this->getResponse()->setTitle(ucwords($this->vivienda->getSlugApartCasa())." ".$this->vivienda->getNombre()." | ".sfContext::getInstance()->getI18N()->__('Location', null, 'messages')." | Begur Holidays | Costa Brava");
	
	$this->availability = Doctrine::getTable('AlquileresDisponibilidad')->getViviendasWithAvailability($this->vivienda);
	$this->prices = Doctrine::getTable('AlquileresPrecios')->getViviendasWithPrice($this->vivienda);
	$minPricesArr[] = array();
	foreach ($this->prices as $precio){
		$minPricesArr[] = $precio->getPrecio_Euros();
		$this->logMessage("Precio: ".$precio->getPrecio_Euros(), "info");
	}
	$this->logMessage("Precio minimo: ".min($minPricesArr), "info");
	$this->precioMinimo = 0;
	if(count($this->prices) > 0){
		$this->precioMinimo = min($minPricesArr);
	}

	//Extrae todos los .jpg numericos 
	$this->fotoPaths = sfFinder::type('file')->name('[0-9]*.jpg')->
		in(sfConfig::get('app_fotos_path').$this->vivienda->getNombre());
	
	$this-> numFotos = count($this->fotoPaths);
	$this->logMessage("Num fotos y fotospath".$this->numFotos." ".sfConfig::get('app_fotos_path').$this->vivienda->getNombre(), "info");
	
	if($this->numFotos!=0){
		//Recorre los extraidos para crear un array con los nombres ordenados
		foreach ($this->fotoPaths as $file){
			$parts=explode("/",$file);
			$filename=$parts[sizeof($parts)-1];
			$number=explode(".",$filename);
			$arrFiles[$number[0]] = $filename;
			$this->logMessage("arrFiles number ".$filename, "info");
			//Comprobamos si esta en cache este thumb
			$cacheFoto = sfFinder::type('file')->name('*'.$this->vivienda->getNombre().'*-'.$filename)->
				in(sfConfig::get('app_fotos_cache'));
			
			if(count($cacheFoto)==0){
				$this->logMessage('No esta la thumb'.$this->vivienda->getNombre().'*-'.$filename, "info");
				$thumbnail = new sfThumbnail(100, 75);
				$thumbnail->loadFile(sfConfig::get('app_static_domain_fotos').$this->vivienda->getNombre().'/'.$filename);
				// Save the thumbnail
				$thumbnail->save(sfConfig::get('app_fotos_cache').$this->vivienda->getNombre().'100x75-'.$filename);
				//$this->logMessage('cacheFotyo: -'.sfConfig::get('app_abs_path_cache').$filename, "info");
			}
		}
		$arrFiles[] = ksort($arrFiles, SORT_NUMERIC);
		array_pop($arrFiles);
		$this->arrFiles = $arrFiles;
		$this->photoNumber = count($arrFiles);
		
		$this->logMessage("arrFiles number ".$this->photoNumber, "info");
		
		//Si hay fotoComments los obtenemos s?lo de las fotos existentes
		//if($this->vivienda->getFotocomment()=='s'){
		
		$q = Doctrine::getTable('FotosComments')->createQuery('f')
		  ->whereIn('f.numero', $arrFiles)
		  ->andWhere('f.nombre = ? ', array($this->vivienda->getNombre()));
		$this->fotoComments= $q->execute();
		
		//$this->logMessage("Array comments".$this->fotoComments, "info");
		  
			//$this->fotoComments = $q->fetchArray();
			foreach ($this->fotoComments as $comment){
				//$this->logMessage("Commnet: ".$comment->getNumero().'-'.$comment->getNombre().'-'.$comment->getEs_comment(), "info");
			}
		}
		//}
		
		$rutaComment = $this->parseRefererComment($request);
		if($rutaComment!=""){
			$this->getUser()->setFlash('refererComment', $rutaComment);
		}
		
		//Si viene de reserva pago exitoso recuperamos la reserva
		if($request->getParameter('book') && $request->getParameter('Ds_Order') && $request->getParameter('Ds_Response') === "0000"){
			$this->reserva = Doctrine::getTable('ReservasAlquileres')->findOneBydsorder($request->getParameter('Ds_Order'));
			if($this->reserva->getId() != $request->getParameter('book') || $this->reserva->getDsresponse() != "0000"){
				throw new sfException("No reservation");
			}
		}	
		$this->forward404Unless($this->vivienda);
  }
  
  private function viviendaTitle($vivienda){
	$tipoVivienda = "Appartement";
	if($vivienda->getApart_casa() > 0){$tipoVivienda="Maison ";}
	$title = ucwords($this->vivienda->getSlugApartCasa())." ".$this->vivienda->getNombre()." en location, avec ";
	if($vivienda->getPiscina() >0 ){
		$title = $title."piscine et ";
	}
	$title = $title.$vivienda->getHabitaciones()." chambres, ";
	$title = $title."pour ".$vivienda->getCapacidad()." personnes situe a ".$vivienda->getZonas()->getZona().", ".$this->vivienda->getZonas()->getLocalidades()." | Costa Bravas";
	return $title;
  }
  
 /* private function viviendaPdfTitle($vivienda){
	$tipoVivienda = "Appartement";
	if($vivienda->getApart_casa() > 0){$tipoVivienda="Maison ";}
	$title = ucwords($this->vivienda->getSlug())." en location, avec ";
	if($vivienda->getPiscina() >0 ){
		$title = $title."piscine et ";
	}
	$title = $title.$vivienda->getHabitaciones()." chambres, ";
	$title = $title."pour ".$vivienda->getCapacidad()." personnes situé à ".$vivienda->getZona().", ".$this->vivienda->getZonasViviendas()->getMunicipio().".";
	return $title;
  }*/
  
  private function parseRefererComment($request){
	$referer = $request->getReferer();
	$environment = sfConfig::get("sf_environment");
	$parseurl = parse_url($referer);
	$script = ($environment == "prod") ? $parseurl["host"] : "frontend_dev.php";
	$referer = substr($referer, strpos($referer, $script) + strlen($script));
	$referer = str_replace("/".$script, "", $referer);
	$ruta = $this->getContext()->getRouting()->findRoute($referer);
	
	$this->logMessage($ruta['name']);
	//$params = sfContext::getInstance()->getRouting()->parse($referer);
	//$this->logMessage("Ruta del referer".$params['action']." ".$params['module'], "info");
	//return $params;
	if(isset($ruta['parameters']['comment'])){
		$this->logMessage("Ruta parseReferer".$ruta['parameters']['comment'], "info");
		return $ruta['parameters']['comment'];
	}
	else return "";
	
  }
  
      
  public function executePDF(){
	$config = sfTCPDFPluginConfigHandler::loadConfig();
 
	// pdf object
	$pdf = new sfTCPDF();

	// settings
	$pdf->SetFont("FreeSerif", "", 12);
	$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
	$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
	$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
	$pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
	$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
	$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);

	$this->vivienda = $this->getRoute()->getObject();
	
	$pdf->SetTitle(ucwords($this->vivienda->getSlug()." ".$this->vivienda->getAlias()));
	$pdf->SetAuthor("Costa Brava's");
	$pdf->SetCreator("Costa Brava's");
	$pdf->SetKeywords("Costa Brava Villas location appartements");
	$pdf->SetSubject("Vacances");
	
	// init pdf doc
	$pdf->AliasNbPages();
	$pdf->AddPage();
	$pdf->SetFont('FreeSerif','C',10);
	$pdf->Cell(15,-15, $this->vivienda->getCapacidad()." personnes - ".$this->vivienda->getHabitaciones()." chambres", 0,0,'L');
	$pdf->Cell(160,-15, $this->vivienda->getZona().", ".$this->vivienda->getZonasViviendas()->getMunicipio(), 0,0,'R');
	$pdf->Ln(5);
	if ($this->vivienda->getPiscina() > 0){
		$pdf->Cell(15,-10, $this->tipoPiscinaArg($this->vivienda->getPiscina()), 0,0,'L');
	}
	$pdf->Ln();
	
	$pdf->SetFont('FreeSerif','C',17);
	$pdf->Cell(170,10, strtoupper($this->vivienda->getSlug()." ".$this->vivienda->getAlias()), 0,0,'C');

	$pdf->setImageScale(1.6);
	//$imageThumb1 = $pdf->Image('D:\symfonyprojects\costabravas2\web\fotos\thumb1.jpg',15);
	//$imageThumb2 = $pdf->Image('D:\symfonyprojects\costabravas2\web\fotos\thumb1.jpg',170);
	$imageThumb1 = $pdf->Image("http://www.costabravas.fr/cache/".$this->vivienda->getNombre()."100x75-3.jpg",16);
	$imageThumb2 = $pdf->Image("http://www.costabravas.fr/cache/".$this->vivienda->getNombre()."100x75-4.jpg",170);
	$pdf->Ln(15);
	
	$pdf->SetFont('FreeSerif','I',12);
	//$pdf->SetFillColor(0, 240, 255, true);
	

	$pdf->Write($h=0, "S'il vous plaît, consultez la disponibilité et prix actualisés sur ", $link='', $fill=0, $align='C', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);
	$pdf->SetTextColor(101, 148, 74);
$pdf->Write($h=0, "http://www.costabravas.fr/location/".$this->vivienda->getSlug()."-".$this->vivienda->getNombre(), $link='http://www.costabravas.fr/location/'.$this->vivienda->getSlug()."-".$this->vivienda->getNombre(), $fill=0, $align='C', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);
	
	$pdf->Ln(5);
	$pdf->SetLineWidth(1);
	$pdf->SetTextColor(0,0,0);
	$pdf->SetFont('FreeSerif','I',12);
	//$pdf->SetFillColor(0, 240, 255, true);
	
	$pdf->SetFont('FreeSerif','I','J',14);
	$pdf->Write($h=0, $this->vivienda->getDesc_brev_fr(), $link='', $fill=0, $align='L', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);
	$pdf->Ln(5);
	$pdf->SetFont('FreeSerif','J',12);
	$pdf->Write($h=0, $this->vivienda->getDesc_pre_fr(), $link='', $fill=0, $align='L', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);
	$pdf->Ln(5);
	$pdf->setImageScale(1.6);
	//$image1 = $pdf->Image("/home/gafilter/www/begurholidays/fotos/".$this->vivienda->getNombre()."/1.jpg",15);
	//$image2 = $pdf->Image("/home/gafilter/www/begurholidays/fotos/".$this->vivienda->getNombre()."/2.jpg",110);
	//$image1 = $pdf->Image('D:\symfonyprojects\costabravas2\web\fotos\annsoso\1.jpg',15);
	//$image2 = $pdf->Image('D:\symfonyprojects\costabravas2\web\fotos\annsoso\2.jpg',120);
	
	//$pdf->MultiCell(60, 60, $image1, 0, 'L', 0, 0, '', '', false);
	//$pdf->MultiCell(60, 60, $image2, 0, 'R', 0, 0, '', '', false);
        $image1 = $pdf->Image(sfConfig::get('app_fotos_path').$this->vivienda->getNombre()."/1.jpg",15);
        $image2 = $pdf->Image(sfConfig::get('app_fotos_path').$this->vivienda->getNombre()."/2.jpg",107);
	
	$pdf->Ln(75);

$pdf->Write($h=0, $this->vivienda->getDesc_fr(), $link='', $fill=0, $align='L', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);
$pdf->Write($h=0, "Jour d'arrivée: ".$this->vivienda->getDiaSemanaCambio(), $link='', $fill=0, $align='R', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);

$pdf->Ln(75);
$pdf->AddPage();
$pdf->Write($h=0, "Où se trouve ".ucwords($this->vivienda->getSlug())." ".$this->vivienda->getAlias()."?", $link='', $fill=0, $align='L', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);
$pdf->Ln(5);
$imagGMaps = $pdf->Image('http://maps.google.com/staticmap?center='.$this->vivienda->getGeoLatitud().','.$this->vivienda->getGeoLongitud().'&markers='.$this->vivienda->getGeoLatitud().','.$this->vivienda->getGeoLongitud().',green&zoom=13&size=800x400&key='.sfConfig::get("app_googlemaps_key").'&sensor=true_or_false');
$pdf->Ln(100);	
if($this->vivienda->getZonasViviendas()->getZonaDescFr()){	
	$pdf->Write($h=0, ucwords($this->vivienda->getSlug())." ".$this->vivienda->getAlias()." se trouve à ".$this->vivienda->getZonasViviendas()->getZona().". ".$this->vivienda->getZonasViviendas()->getZonaDescFr().".", $link='', $fill=0, $align='L', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);
$pdf->Ln();	
}

$pdf->Write($h=0, "Information imprimé le ". date('d/m/Y'), $link='', $fill=0, $align='R', $ln=true, $stretch=0, $firstline=false, $firstblock=false, $maxh=0);	

	// output
	$pdf->Output();

	// Stop symfony process
	throw new sfStopException();

	}
	
	
 public function tipoPiscinaArg($tipoPiscina){
		switch ($tipoPiscina) {
			case 1:
				return "Piscine comm.";
				break;
			case 2:
				return "Piscine privée";
				break;
		}
    }
  
  function createDateRangeArray($strDateFrom,$strDateTo)
{
    // takes two dates formatted as YYYY-MM-DD and creates an
    // inclusive array of the dates between the from and to dates.

    // could test validity of dates here but I'm already doing
    // that in the main script

    $aryRange=array();

    $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),     substr($strDateFrom,8,2),substr($strDateFrom,0,4));
    $iDateTo=mktime(1,0,0,substr($strDateTo,5,2),     substr($strDateTo,8,2),substr($strDateTo,0,4));

    if ($iDateTo>=$iDateFrom)
    {
        array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry
        while ($iDateFrom<$iDateTo)
        {
            $iDateFrom+=86400; // add 24 hours
            array_push($aryRange,date('Y-m-d',$iDateFrom));
        }
    }
    return $aryRange;
}
  
  public function executeIniciarDatosReserva(sfWebRequest $request){
	
	//$this->forward404Unless($request->isMethod('post'));
	//Obtenemos la vivienda y el calculo de precios
	$prices = $request->getParameter('pr');
	
	//Obtenemos la vivienda a partir del primer price
	$q = Doctrine_Query::create()->from('ViviendasAlquileres v')
	->leftJoin('v.AlquileresPrecios p')->where('p.id = ?', $prices[0]);
	$this->vivienda = $q->fetchOne();
	//Nos aseguramos de que propietario vivienda tiene activado pagoonline
	$this->forward404Unless($this->vivienda->getUsuario()->getPagoonline() == 1);
	
	$this->preciosCollection = $this->getCheckPrices($prices, $this->vivienda);
	
	
	//Hacemos los calculos del precio final
	$this->form = new ReservasPersonasForm();
	$this->setLayout('layoutPago');
	//Para cambiar idioma en pantalla iniciar pago
	$paramUrl = "";
	$numItems = count($prices);
	$i = 0;
	foreach( $prices as $key => $value ){
		if(++$i === $numItems) {
			$paramUrl .= "pr[]=".$value;
		}
		else{
			$paramUrl .= "pr[]=".$value."&";
		}
	}
	$this->getResponse()->setSlot('semana_alquiler_id', $paramUrl);
	$this->getResponse()->setTitle("Reserva de ".$this->vivienda->getNombre());
  }
  
  public function executeCrearDatosReserva(sfWebRequest $request){
    $this->forward404Unless($request->isMethod(sfRequest::POST));
    $this->form = new ReservasPersonasForm();
	 
	$reservas_alquileres = new ReservasAlquileres();  
	$reservas_alquileres->setViviendaId($request->getParameter('idVivienda'));
	$arrParam = $request->getParameter('reservas_personas');
	$reservas_alquileres->setNumadultos($arrParam['numadultos']);
	$reservas_alquileres->setNumninos($arrParam['numninos']);
	$reservas_alquileres->setNumbebes($arrParam['numbebes']);
	$reservas_alquileres->setNumtronas($arrParam['numtronas']);
	$reservas_alquileres->setNumcunas($arrParam['numcunas']);
	if($arrParam['incluirsabanas']){
		$reservas_alquileres->setPreciosabanas($arrParam['preciosabanas']);
	}
	$reservas_alquileres->setPreciototalreserva($arrParam['preciototalreserva']);
	$reservas_alquileres->setWebreserva($arrParam['webreserva']);
	$reservas_alquileres->setIdiomareserva(sfContext::getInstance()->getUser()->getLangCulture());
	//Si hay seguro de anulacion insertamos el precio de la prima, si no se borra
	if($arrParam['seguroanulacion']){
		$reservas_alquileres->setSeguroanulacion($request->getParameter('precioseguroanulacion'));
	}
	else{
		$reservas_alquileres->setSeguroanulacion(null);
	}

	$prices = $request->getParameter('pr');
	$prices = explode(" ", $prices[0]);
	//Obtenemos la vivienda a partir del primer price
	$q = Doctrine_Query::create()->from('ViviendasAlquileres v')
	->leftJoin('v.AlquileresPrecios p')->where('p.id = ?', $prices[0]);
	$this->vivienda = $q->fetchOne();
	
	$reservas_alquileres->save();
	
	$this->preciosCollection = $this->getCheckPrices($prices, $this->vivienda, $reservas_alquileres->getId(), true);
	
	
	
	//Actualizamos la tabla de AlquileresPrecios con esta reserva_id
	//es informativo para saber las fechas en proceso notificacion y enviar emails
	//solo es necesario hacerlo cuando se crea el registro de reserva (y si es valida), no al actualizar
	if($reservas_alquileres!=null){
		foreach($prices as $price){
			$precio_alquiler = Doctrine::getTable('AlquileresPrecios')->findOneById($price);
			$precio_alquiler->setReservaId($reservas_alquileres->getId());
			$precio_alquiler->save();
		}
	}
	
	$reservas_alquileres = $this->processForm($request, $this->form, $reservas_alquileres);
	
	if($this->vivienda->getUsuario()->getPagoOnline() && $reservas_alquileres != null){
		$precioAPagarAhora = $reservas_alquileres->getPrecioEstrictoAlquiler($reservas_alquileres->getId())*40/100;
		if($reservas_alquileres->getSeguroanulacion()!=null || $reservas_alquileres->getSeguroanulacion()!=0){
				$precioAPagarAhora += $reservas_alquileres->getSeguroanulacion();
		}
		$this->pasarela = $this->getPasarelaSermepa($reservas_alquileres, $precioAPagarAhora, http_build_query($request->getParameter('pr')));
		$reservas_alquileres->setDsorder($this->pasarela->getPedido());
		$reservas_alquileres->save();
	}
	
	$this->setTemplate('iniciarDatosReserva');
	$this->setLayout('layoutPago');
  }
  
  
  public function executeActualizarDatosReserva(sfWebRequest $request){
    $this->forward404Unless($request->isMethod(sfRequest::POST));
	
	$this->forward404Unless($reservas_personas = Doctrine::getTable('ReservasPersonas')->find(array($request->getParameter('id'))), sprintf('Object reservas_personas does not exist (%s).', $request->getParameter('id')));
	//Siempre habra una ReservasAlquileres
	$this->forward404Unless($reservas_alquileres = Doctrine::getTable('ReservasAlquileres')->find(array($reservas_personas->getReservaId())), sprintf('Object reservas_alquileres does not exist (%s).', $reservas_personas->getReservaId()));
	
	//Ya no se permiten modificaciones de reserva si se ha pagado correctamente
	$this->forward404Unless($reservas_alquileres->getDsresponse()==null || $reservas_alquileres->getDsresponse()!="0000");
	$prices = $request->getParameter('pr');
	$prices = explode(" ", $prices[0]);
	//Obtenemos la vivienda a partir del primer price
	$q = Doctrine_Query::create()->from('ViviendasAlquileres v')
	->leftJoin('v.AlquileresPrecios p')->where('p.id = ?', $prices[0]);
	$this->vivienda = $q->fetchOne();
	//Cuando se actualiza se reescribe la reservaid en AlquileresDisponibilidades
	$this->preciosCollection = $this->getCheckPrices($prices, $this->vivienda, $reservas_personas->getReservaId(), false);
	
	$this->form = new ReservasPersonasForm();
	$arrParam = $request->getParameter('reservas_personas');
	$reservas_alquileres->setNumadultos($arrParam['numadultos']);
	$reservas_alquileres->setNumninos($arrParam['numninos']);
	$reservas_alquileres->setNumbebes($arrParam['numbebes']);
	$reservas_alquileres->setNumtronas($arrParam['numtronas']);
	$reservas_alquileres->setNumcunas($arrParam['numcunas']);
	if($arrParam['incluirsabanas']){
		$reservas_alquileres->setPreciosabanas($arrParam['preciosabanas']);
	}
	else{
		$reservas_alquileres->setPreciosabanas(0);
	}
	$reservas_alquileres->setPreciototalreserva($arrParam['preciototalreserva']);
	$reservas_alquileres->setWebreserva($arrParam['webreserva']);
	//Si hay seguro de anulacion insertamos el precio de la prima, si no se borra
	if($arrParam['seguroanulacion']){
		$reservas_alquileres->setSeguroanulacion($request->getParameter('precioseguroanulacion'));
	}
	else{
		$reservas_alquileres->setSeguroanulacion(null);
	}
	  
	
	$this->form = new ReservasPersonasForm($reservas_personas);
	
	
	//Parametros pago online TPV Sermepa
	if($this->vivienda->getUsuario()->getPagoOnline()){
		$precioAPagarAhora = $reservas_alquileres->getPrecioEstrictoAlquiler($reservas_alquileres->getId())*40/100;

		if($reservas_alquileres->getSeguroanulacion()!=null || $reservas_alquileres->getSeguroanulacion()!=0){
				$precioAPagarAhora += $reservas_alquileres->getSeguroanulacion();
		}
		$this->pasarela = $this->getPasarelaSermepa($reservas_alquileres, $precioAPagarAhora, http_build_query($request->getParameter('pr')));
		$reservas_alquileres->setDsorder($this->pasarela->getPedido());
	}
	
	//$reservas_alquileres->setViviendaId($form->getValue('idVivienda'));
	$reservas_alquileres->save();
	
	
	
    $this->processForm($request, $this->form, $reservas_alquileres);
	
	
	
	//Y marcamos la reserva_id en la tabla de disponibilidad para el calendario
    $this->setTemplate('iniciarDatosReserva');
	$q = Doctrine_Query::create()->from('ViviendasAlquileres v')
	->where('v.id = ?', $request->getParameter('idVivienda'));
	$this->vivienda = $q->fetchOne();
	$this->setTemplate('iniciarDatosReserva');
	$this->setLayout('layoutPago');
  }
  
  
  
  public function executeEditarDatosReserva(sfWebRequest $request){
    $this->forward404Unless($reservas_personas = Doctrine::getTable('ReservasPersonas')->find(array($request->getParameter('id'))), sprintf('Object reservas_personas does not exist (%s).', $request->getParameter('id')));
	//Siempre habrá una ReservasAlquileres
	$this->forward404Unless($reservas_alquileres = Doctrine::getTable('ReservasAlquileres')->find(array($reservas_personas->getReservaId())), sprintf('Object reservas_alquileres does not exist (%s).', $reservas_personas->getReservaId()));
	//Ya no se permiten modificaciones de reserva si se ha pagado correctamente
	$this->forward404Unless($reservas_alquileres->getDsresponse()==null || $reservas_alquileres->getDsresponse()!="0000");
	$prices = $request->getParameter('pr');
	$prices = explode(" ", $prices[0]);
	//Obtenemos la vivienda a partir del primer price
	$q = Doctrine_Query::create()->from('ViviendasAlquileres v')
	->leftJoin('v.AlquileresPrecios p')->where('p.id = ?', $prices[0]);
	$this->vivienda = $q->fetchOne();
	//Cuando se actualiza se reescribe la reservaid en AlquileresDisponibilidades
	$this->preciosCollection = $this->getCheckPrices($prices, $this->vivienda, $reservas_personas->getReservaId(), false);
	
	$this->vivienda = $reservas_alquileres->getViviendasAlquileres();
	//Parametros pago online TPV Sermepa
	if($this->vivienda->getUsuario()->getPagoOnline()){
		$precioAPagarAhora = $reservas_alquileres->getPrecioEstrictoAlquiler($reservas_alquileres->getId())*40/100;
		if($reservas_alquileres->getSeguroanulacion()!=null || $reservas_alquileres->getSeguroanulacion()!=0){
				$precioAPagarAhora += $reservas_alquileres->getSeguroanulacion();
		}
		$this->pasarela = $this->getPasarelaSermepa($reservas_alquileres, $precioAPagarAhora, http_build_query($request->getParameter('pr')));
		$reservas_alquileres->setDsorder($this->pasarela->getPedido());
	}
	$this->form = new ReservasPersonasForm($reservas_personas);
	$this->form->setDefault('numadultos', $reservas_alquileres->getNumadultos());
	$this->form->setDefault('numninos', $reservas_alquileres->getNumninos());
	$this->form->setDefault('numbebes', $reservas_alquileres->getNumbebes());
	if($reservas_alquileres->getNumtronas()>0){
		$this->form->setDefault('numtronas', $reservas_alquileres->getNumtronas());
	}
	if($reservas_alquileres->getNumcunas()>0){
		$this->form->setDefault('numcunas', $reservas_alquileres->getNumcunas());
	}
	if($reservas_alquileres->getSeguroanulacion() != null){
		$this->form->setDefault('seguroanulacion',array('0'));
	}
	$this->form->setDefault('aceptoterminos',array('0'));
	$this->form->setDefault('emailreservaconfirmate', $reservas_personas->getEmailreserva());
	$this->setTemplate('iniciarDatosReserva');
	$this->setLayout('layoutPago');
  }
  
    private function getPasarelaSermepa($reservaAlquiler, $precio, $periodos){
		try{
			$tomador = Doctrine::getTable('ReservasPersonas')->getPersonaResponsableReserva($reservaAlquiler->getId());
			$pasarela = new Sermepa();
			$pasarela->pedido(date('ymdHis'));  //generamos el número de recibo usando date por ejemplo
			$pasarela->clave($reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPagossegurosOnline()->getMerchantpassword());    //clave asignada por el banco.
			$pasarela->importe($precio);
			$pasarela->codigofuc($reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPagossegurosOnline()->getMerchantcode());
			$pasarela->moneda(sfConfig::get('app_currency_sermepa'));
			$pasarela->transaction_type(sfConfig::get('app_transaccion_sermepa'));
			$pasarela->producto_descripcion('Begur Holidays - '.ucwords($reservaAlquiler->getViviendasAlquileres()->getNombre()));
			$pasarela->titular('Begur Holidays - '.ucwords($reservaAlquiler->getViviendasAlquileres()->getNombre()));
			$pasarela->nombre_comercio('Ejemplo');
			$pasarela->set_idioma($pasarela->getLang($pasarela->getIdioma(sfContext::getInstance()->getUser()->getLangCulture())));
			//Si el comercio tiene notificación "on-line". URL del comercio que recibirá un post con los datos de la transacción .
			$pasarela->url_notificacion('http://www.begurholidays.com/gestionarNotificacion'); 
			$pasarela->url_ok($this->getController()->genUrl('@location_show_'.sfContext::getInstance()->getUser()->getLangCulture().'?book='.$reservaAlquiler->getId().'&slug='.$reservaAlquiler->getViviendasAlquileres()->getSlug(), true)); // Si le das aceptar finalizada la compra desde la pasarela de pagos
			$pasarela->url_ko($this->getController()->genUrl('@editar_datos_reserva_'.sfContext::getInstance()->getUser()->getLangCulture().'?id='.$tomador->getId().'&pr[]'.$periodos, true)); // Si le das cancelar desde la pasarela de pagos
			$pasarela->firma();
			return $pasarela;
		}
		catch(Exception $e){
			echo $e->getMessage();   
		}
   }
  
  protected function getCheckPrices($prices, $vivienda, $reservaid, $timecreacion){
	//$prices = $request->getParameter('pr');
	//Comprobamos disponibilidad de todos de los días incluidos en los precios de esa casa
	foreach($prices as $price){
		//Obtenemos el objecto price
		$precio = Doctrine::getTable('AlquileresPrecios')->findOneById($price);
		//Genera un array con todas las fechas comprendidas entre los dos dias
		$arrFechas = $this->createDateRangeArray($precio->getFecha_Inicio(), $precio->getFecha_Fin());
		$x = 0;
		foreach($arrFechas as $fecha){
			$q = Doctrine_Query::create()->from('AlquileresDisponibilidad d')->where('d.vivienda_id = ?', $vivienda)->andWhere('d.fecha_disp = ?', $fecha);
			$disp = $q->fetchOne();
			//Si es nulo OK, esta libre
			if($disp!=null){
				//Actualizo solo la reservaid, si se pasa por parametro
				/* NO DEBERIA ACTUALIZAR NADA DE DISPONIBILIDADES, SOLO COMPROBAR!!!
				if($reservaid){
					if($timecreacion){
						$disp->setReservaTime(date('Y-m-d H:i:s', time()));
					}
					$disp->setReservaId($reservaid);
					$disp->save();
				}
				*/
				$estadoReservaDia = $disp->getAlquileresEstadosDisp()->getClass();
				//Si hay estado para esa fecha comprobar que es estado compatible
				//Si es el primero no puede estar ni 'booked' ni 'reservadopm'
				if($x==0){
					if($estadoReservaDia=='booked' || $estadoReservaDia=='reservadopm'){
						throw new sfException("location.getCheckPrices: ".$disp->getFechaDisp());
					}
				}
				//Si es último no puede estar ni 'booked' ni 'reservadoam'
				else if($x==sizeof($arrFechas)-1){
					if($estadoReservaDia=='booked' || $estadoReservaDia=='bookedam'){
						throw new sfException("location.getCheckPrices: ".$disp->getFechaDisp());
					}
				}
				//Si es cualquiera de los de en medio no puede estar ni 'booked' ni 'bookedam' ni 'bookedpm'
				else{
					if($estadoReservaDia=='booked' || $estadoReservaDia=='bookedam' || $estadoReservaDia=='bookedpm'){
						throw new sfException("location.getCheckPrices: ".$disp->getFechaDisp());
					}
				}
			}
			//Si no existe siempre generamos la fecha con estado disponible para ese periodo en la tabla de disponibilidad
			/*else{
				$alquilerDisponibilidad = new AlquileresDisponibilidad();
				$alquilerDisponibilidad->setViviendaId($vivienda->getId());
				$alquilerDisponibilidad->setIdState(1);
				$alquilerDisponibilidad->setFechaDisp($fecha);
				$alquilerDisponibilidad->setReservaId($reservaid);
				$alquilerDisponibilidad->save();
			}*/
		    $x++;
		}
	}
	$qPrecios = Doctrine_Query::create()->from('AlquileresPrecios p')->whereIn('p.id', $prices);
	return $qPrecios->execute();
  }
  
  public function executeGestionarNotificacion(sfWebRequest $request){
	//Si no es peticion de tipo post fuera
	//$this->forward404Unless($request->isMethod('post'));
  	sfProjectConfiguration::getActive()->loadHelpers(array('I18N'));
	//TODO MUY IMPORTANTE proviene del dominio sermepa
	//Comprobamos que existe el dsorder pasado por parametro
	$dsOrder = $request->getParameter("Ds_Order");
	$reservaAlquiler = Doctrine::getTable('ReservasAlquileres')->findOneBydsorder($dsOrder);
	if($reservaAlquiler == null){
		$this->logMessage("Error notificacion pagoonline no se encuentra esta orden de pago en tabla reservas ".$dsOrder, "err");
		throw new sfStopException("No se encuentra esta orden en la tabla de reservas ".$dsOrder);
	}
	
	//Solo se modifican las disponibilidades y se envia seguro si el pago ha sido correcto
	if($request->getParameter("Ds_Response") == "0000"){
		//Actualizamos el tipo de respuesta, fecha, pais tarjeta
		$reservaAlquiler->setDsresponse($request->getParameter("Ds_Response"));
		$reservaAlquiler->setDscardcountry($request->getParameter("Ds_Card_Country"));
		$reservaAlquiler->setDsamount($request->getParameter("Ds_Amount")/100);
		$reservaAlquiler->setDsdatehour(date('Y-m-d H:i:s'));
		$reservaAlquiler->save();
		//Actualizamos los dias de alquileres_disponibilidad -->OBTENEMOS ESTOS DIAS DE LA TABLA ALQUILERES_PRECIOS, HACEMOS MERGE Y LOS ORDENAMOS 
		//$q = Doctrine_Query::create()->from('AlquileresDisponibilidad d')->where('d.vivienda_id = ?', $reservaAlquiler->getViviendasAlquileres()->getId())->andWhere('d.reserva_id = ?', $reservaAlquiler->getId())->orderBy('d.fecha_disp');
		$q = Doctrine_Query::create()->from('AlquileresPrecios p')->where('p.reserva_id = ?', $reservaAlquiler->getId())->orderBy('p.fecha_inicio');
		$precios_reserva = $q->execute();
		
		//Identificamos la fecha de inicio del primer periodos y la fecha_fin del ultimo
		$fecinicio = $precios_reserva->getFirst()->getFechaInicio();
		$fecfin = $precios_reserva->getLast()->getFechaFin();
		$dias_reserva = $arrFechas = $this->createDateRangeArray($fecinicio, $fecfin);
		/*$x = 0;
		foreach ($precios_reserva as $precio){
			if($precio-)
			$x++;
		}*/
		//echo count($dias_reserva);
		$x = 0;
		foreach($dias_reserva as $dia_reserva){
			//Buscamos dia de vivienda en AlquileresDisponibilidad
			$q = Doctrine_Query::create()->from('AlquileresDisponibilidad d')->where('d.vivienda_id = ?', $reservaAlquiler->getViviendasAlquileres()->getId())->andWhere('d.fecha_disp = ?', $dia_reserva);
			$dia_disponibilidad_collection = $q->execute();
			//El dia de disponibilidad existe, es primero o ultimo
			if(count($dia_disponibilidad_collection) != null){
				$dia_disponibilidad = $dia_disponibilidad_collection->getFirst();
				//Si es el primer dia de la reserva
					if($x==0){
						//Si es troba reservadoam o en oferta, el marquem booked --> SI ES EL PRIMER DIA LO INTENTAMOS BUSCAR EN ALQUILERES_DISPONIBILIDAD
						if($dia_disponibilidad->getAlquileresEstadosDisp()->getClass()== 'bookedam' || $dia_disponibilidad->getAlquileresEstadosDisp()->getClass()== 'oferta'){
							$dia_disponibilidad->setIdState(2);
						}
						else{
							$this->logMessage("location.executeGestionarNotificacion. Error notificacion pagoonline dia primero reserva estado inconsistente ".$dia_reserva, "err");
						}
					}
					//Si es el último
					else if($x==sizeof($dias_reserva)-1){
						if($dia_disponibilidad->getAlquileresEstadosDisp()->getClass()== 'bookedpm' || $dia_disponibilidad->getAlquileresEstadosDisp()->getClass()== 'oferta'){
							$dia_disponibilidad->setIdState(2);
						}
						//Qualsevol altre estat es inconsistent
						else{
							$this->logMessage("location.executeGestionarNotificacion. Error notificacion pagoonline dia último reserva estado inconsistente ".$dia_reserva, "err");
						}
					}
					//Estado inconsistente
					else{
						$this->logMessage("location.executeGestionarNotificacion. Error notificacion pagoonline dia último reserva estado inconsistente ".$dia_reserva, "err");
					}	
					//Guardamos el registro
					$dia_disponibilidad->save();
						
  			}
  			
			//Este dia disponibilidad no existe bajo ningun estado y hay que instanciarlo, rellenarlo (con estado booked) e insertarlo
			else{
				$alquilerDisponibilidad = new AlquileresDisponibilidad();
				$alquilerDisponibilidad->setViviendaId($reservaAlquiler->getViviendasAlquileres()->getId());
				$alquilerDisponibilidad->setIdState(2);
				$alquilerDisponibilidad->setFechaDisp($dia_reserva);
				$alquilerDisponibilidad->setReservaId($reservaAlquiler->getId());
				$alquilerDisponibilidad->setReservaTime(date('Y-m-d H:m:s'));
				
				//Es el primero
				if($x==0){
					$alquilerDisponibilidad->setIdState(4);
				}
				//Es el ultimo
				else if($x==sizeof($dias_reserva)-1){
					$alquilerDisponibilidad->setIdState(3);
				}
				//Es intermedio
				else{
					$alquilerDisponibilidad->setIdState(2);
				}
				
				$alquilerDisponibilidad->save();
				
				//Y marcar en la tabla de alquileres_precios la/s semana/s alquilada con el id_reserva correspondiente
				//Solo utilizamos los dias intermedios, para evitar encabalgamientos entre semanas que acaban y empiezan
				//Buscamos la semana en la que se encuentra
				//$dia_reserva->setIdState(2);
				/* ESTO NO HARIA FALTA, YA QUE YA TENEMOS LA RESERVAID EN LA TABLA ALQUILERESRPECIOS
				$q = Doctrine_Query::create()->from('AlquileresPrecios p')->where('? BETWEEN p.fecha_inicio AND p.fecha_fin', $dia_reserva->getFechaDisp())->andWhere('p.vivienda_id = ?', $reservaAlquiler->getViviendasAlquileres()->getId());
				$dias_precios = $q->execute();
				$dia_precio = $dias_precios->getFirst();
				$dia_precio->setReservaId($reservaAlquiler->getId());
				$dia_precio->save();
				*/
			}
			
			$x++;
	}
		
	$tomadorPersona = Doctrine::getTable('ReservasPersonas')->getPersonaResponsableReserva($reservaAlquiler->getId());
	//Seguro TAIS, solo si el usuario tiene seguro activado
	if($reservaAlquiler->getViviendasAlquileres()->getUsuario()->getSeguroonline() && $reservaAlquiler->getSeguroanulacion()!=null){
		$xmlSeguroResult = $this->procesarEnviamentSeguroOnline($reservaAlquiler, $tomadorPersona);
		$reader = new XMLReader();
		$reader->XML($xmlSeguroResult);
		/*$reader->XML('<peticion>
		<resultado coderror="0002" reserva="120805103817" id="">El número de reserva 120805103817 ya existe.</resultado>
	</peticion>');*/
		//echo "<pre>".$xmlSeguroResult."</pre>";
		
		while($reader->read()){
			if (  $reader->nodeType ==XMLReader::ELEMENT && $reader->name == "resultado" ) {
				//printf("coderror=%s, id=%s\n", $reader->getAttribute('coderror'), $reader->getAttribute('id'));
				$reservaAlquiler->setTaisresponse($reader->getAttribute('coderror'));
				if($reader->getAttribute('id') != ''){
					$reservaAlquiler->setTaisid($reader->getAttribute('id'));
				}
				$reservaAlquiler->save();
			}
		}
	}
	try{
	//Envio de emails de confirmacion
	$message = Swift_Message::newInstance()
			  ->setFrom(sfConfig::get('app_email_from'))
			  ->setTo(sfConfig::get('app_email_reservas_to'))
			  ->setBcc(sfConfig::get('app_email_to_david'))
			  ->setSubject('Begur Holidays  - Pago Reserva '.$reservaAlquiler->getViviendasAlquileres()->getSlugApartCasa()." ".$reservaAlquiler->getViviendasAlquileres()->getNombre()." ".$reservaAlquiler->getDsorder()."-".$reservaAlquiler->getId());
			  $message->setBody($this->getPartial('location/sendMailPagoOficina', array('vivienda'=>$reservaAlquiler->getViviendasAlquileres()->getSlugApartCasa()." ".$reservaAlquiler->getViviendasAlquileres()->getNombre(), 'link'=>'http://www.begurholidays.com/es/alquileres/'.$reservaAlquiler->getViviendasAlquileres()->getSlug(), 'webreserva'=>$reservaAlquiler->getWebreserva(), 'idiomareserva'=>$reservaAlquiler->getIdiomareserva(), 'adultosreserva'=>$reservaAlquiler->getNumadultos(), 'ninosreserva'=>$reservaAlquiler->getNumninos(), 'bebesreserva'=>$reservaAlquiler->getNumbebes(),'fechapagoreserva'=>$reservaAlquiler->getDsdatehour(), 'idreserva'=>$reservaAlquiler->getId(), 'ordenpagoreserva'=>$reservaAlquiler->getDsorder(), 'semanas'=>$reservaAlquiler->getAlquileresPrecios(), 'preciolimpieza'=>$reservaAlquiler->getViviendasAlquileres()->getPreciolimpieza(), 'preciosabanas'=>$reservaAlquiler->getPreciosabanas(), 'numtronasreserva'=>($reservaAlquiler->getNumtronas()), 'tronasreserva'=>($reservaAlquiler->getNumtronas()*count($reservaAlquiler->getAlquileresPrecios())*$reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPrecioTrona()), 'numcunasreserva'=>($reservaAlquiler->getNumcunas()), 'cunasreserva'=>($reservaAlquiler->getNumcunas()*count($reservaAlquiler->getAlquileresPrecios())*$reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPrecioCuna()), 'seguroanulacion'=>$reservaAlquiler->getSeguroanulacion(), 'idseguroanulacion'=>$reservaAlquiler->getTaisid(), 'preciototalreservapagasenal'=>$reservaAlquiler->getDsamount(), 'preciototalreservacalc'=>$reservaAlquiler->getPreciototalreserva(), 'nombrereserva'=>$tomadorPersona->getNombrereserva(), 'apellidosreserva'=>$tomadorPersona->getApellidosreserva(), 'sexoreserva'=>$tomadorPersona->getSexoreserva(), 'fechanacreserva'=>$tomadorPersona->getFechanacreserva(), 'tipodocumentoreserva'=>$this->getContext()->getI18n()->__(Util::getTypeDocumento($tomadorPersona->getTipodocumentoreserva())), 'dnipasaportereserva'=>$tomadorPersona->getDnipasaportereserva(), 'fechaexpeddnipasaporte'=>$tomadorPersona->getFechaexpeddnipasaporte(), 'preftelefono1reserva'=>$tomadorPersona->getPreftelefono1reserva(), 'telefono1reserva'=>$tomadorPersona->getTelefono1reserva(), 'preftelefono2reserva'=>$tomadorPersona->getPreftelefono2reserva(), 'telefono2reserva'=>$tomadorPersona->getTelefono2reserva(), 'emailreserva'=>$tomadorPersona->getEmailreserva(), 'addressreserva'=>$tomadorPersona->getAddressreserva(), 'codigopostalreserva'=>$tomadorPersona->getCodigopostalreserva(), 'localidadreserva'=>$tomadorPersona->getLocalidadreserva(), 'paisreserva'=>$tomadorPersona->getPaisreserva(), 'resultSeguroonline'=>$reservaAlquiler->getTaisresponse(), 'ipsistema'=>$this->getRequest()->getHttpHeader ('addr','remote'))))->setContentType('text/html');
			  $this->getMailer()->send($message);
	  }
	  catch(Exception $e){
		  $mailer->disconnect();
		  $this->logMessage("Error en envio email a oficina: ".$e->getMessage(), "err");
	  }
	
	  try{
			  //Envio de email de confirmacion a cliente
			  $message = Swift_Message::newInstance()
			  ->setFrom(sfConfig::get('app_email_from'))
			  ->setTo($tomadorPersona->getEmailreserva())
			  ->setBcc(sfConfig::get('app_email_to'))
			  ->setSubject('Begur Holidays - '.$reservaAlquiler->getViviendasAlquileres()->getSlugApartCasa()." ".$reservaAlquiler->getViviendasAlquileres()->getNombre()." ".$reservaAlquiler->getDsorder()."-".$reservaAlquiler->getId());
			  $message->setBody($this->getPartial('location/sendMailPagoCliente_'.strtolower($reservaAlquiler->getIdiomareserva()), array('vivienda'=>$reservaAlquiler->getViviendasAlquileres()->getSlugApartCasa()." ".$reservaAlquiler->getViviendasAlquileres()->getNombre(), 'link'=>'http://www.begurholidays.com/en/rentals/'.$reservaAlquiler->getViviendasAlquileres()->getSlug(), 'webreserva'=>$reservaAlquiler->getWebreserva(), 'idiomareserva'=>$reservaAlquiler->getIdiomareserva(), 'adultosreserva'=>$reservaAlquiler->getNumadultos(), 'ninosreserva'=>$reservaAlquiler->getNumninos(), 'bebesreserva'=>$reservaAlquiler->getNumbebes(),'fechapagoreserva'=>$reservaAlquiler->getDsdatehour(), 'idreserva'=>$reservaAlquiler->getId(), 'ordenpagoreserva'=>$reservaAlquiler->getDsorder(), 'semanas'=>$reservaAlquiler->getAlquileresPrecios(), 'preciolimpieza'=>$reservaAlquiler->getViviendasAlquileres()->getPreciolimpieza(), 'preciosabanas'=>$reservaAlquiler->getPreciosabanas(), 'numtronasreserva'=>($reservaAlquiler->getNumtronas()), 'tronasreserva'=>($reservaAlquiler->getNumtronas()*count($reservaAlquiler->getAlquileresPrecios())*$reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPrecioTrona()), 'numcunasreserva'=>($reservaAlquiler->getNumcunas()), 'cunasreserva'=>($reservaAlquiler->getNumcunas()*count($reservaAlquiler->getAlquileresPrecios())*$reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPrecioCuna()), 'seguroanulacion'=>$reservaAlquiler->getSeguroanulacion(), 'idseguroanulacion'=>$reservaAlquiler->getTaisid(), 'preciototalreservapagasenal'=>$reservaAlquiler->getDsamount(), 'preciototalreservacalc'=>$reservaAlquiler->getPreciototalreserva(), 'nombrereserva'=>$tomadorPersona->getNombrereserva(), 'apellidosreserva'=>$tomadorPersona->getApellidosreserva(), 'sexoreserva'=>$tomadorPersona->getSexoreserva(), 'fechanacreserva'=>$tomadorPersona->getFechanacreserva(), 'tipodocumentoreserva'=>$this->getContext()->getI18n()->__(Util::getTypeDocumento($tomadorPersona->getTipodocumentoreserva()), null, 'forms'), 'dnipasaportereserva'=>$tomadorPersona->getDnipasaportereserva(), 'fechaexpeddnipasaporte'=>$tomadorPersona->getFechaexpeddnipasaporte(), 'preftelefono1reserva'=>$tomadorPersona->getPreftelefono1reserva(), 'telefono1reserva'=>$tomadorPersona->getTelefono1reserva(), 'preftelefono2reserva'=>$tomadorPersona->getPreftelefono2reserva(), 'telefono2reserva'=>$tomadorPersona->getTelefono2reserva(), 'emailreserva'=>$tomadorPersona->getEmailreserva(), 'addressreserva'=>$tomadorPersona->getAddressreserva(), 'codigopostalreserva'=>$tomadorPersona->getCodigopostalreserva(), 'localidadreserva'=>$tomadorPersona->getLocalidadreserva(), 'paisreserva'=>$tomadorPersona->getPaisreserva(), 'resultSeguroonline'=>$reservaAlquiler->getTaisresponse(), 'fianza'=>$reservaAlquiler->getViviendasAlquileres()->getFianza(),'ipsistema'=>$this->getRequest()->getHttpHeader ('addr','remote'))))->setContentType('text/html');
			  $this->getMailer()->send($message);
	  }
	  catch(Exception $e){
		  $mailer->disconnect();
		  $this->logMessage("Error en envio email a cliente: ".$e->getMessage(), "err");
	  }
			  
	}
	
	//Si el pago no es correcto dejamos constancia del codigo de error, precio y de datos tarjeta en base de datos
	else{
		$reservaAlquiler->setDsresponse($request->getParameter("Ds_Response"));
		$reservaAlquiler->setDscardcountry($request->getParameter("Ds_Card_Country"));
		$reservaAlquiler->setDsamount($request->getParameter("Ds_Amount")/100);
		$reservaAlquiler->setDsdatehour(date('Y-m-d H:i:s'));
		$reservaAlquiler->save();
	}
	return sfView::NONE;
  }
  
  
  protected function procesarEnviamentSeguroOnline($reservaAlquiler, $tomadorPersona){
	$client = new nusoap_client(sfConfig::get('app_url_seguro_tais_real'), false);
	$err = $client->getError();
	if ($err) {
		$this->logMessage("Problemas conexion seguro TAIS".$err, "err");
	}

	$dom = new DOMDocument('1.0', 'utf-8');
	$proceso = $dom->createElement('proceso');
	$dom->appendChild($proceso);
	$agencia = $dom->createElement('agencia');
	$agencia->appendChild($dom->createTextNode('Casabegur'));
	$proceso->appendChild($agencia);
	
	$fenvio = $dom->createElement('fenvio');
	$fenvio->appendChild($dom->createTextNode(date('Y-m-d\Th:i:s', strtotime($reservaAlquiler->getCreatedAt()))));
	$proceso->appendChild($fenvio);
	
	$reserva = $dom->createElement('reserva');
	$proceso->appendChild($reserva);
	
	$codigo = $dom->createElement('codigo');
	$codigo->appendChild($dom->createTextNode($reservaAlquiler->getDsorder()));
	$reserva->appendChild($codigo);
	
	//El id producto nos lo da ATTIS y es 2
	$producto = $dom->createElement('producto');
	$producto->appendChild($dom->createTextNode("2"));
	$reserva->appendChild($producto);
	
	$prima = $dom->createElement('prima');
	$prima->appendChild($dom->createTextNode(round($reservaAlquiler->getSeguroanulacion()*100/1.15)));
	$reserva->appendChild($prima);
	
	$tomador = $dom->createElement('tomador');
	$reserva->appendChild($tomador);
	
	$nombre = $dom->createElement('nombre');
	$nombre->appendChild($dom->createTextNode($tomadorPersona->getNombreReserva()));
	$tomador->appendChild($nombre);
	
	$apellidos = $dom->createElement('apellidos');
	$apellidos->appendChild($dom->createTextNode($tomadorPersona->getApellidosReserva()));
	$tomador->appendChild($apellidos);
	
	$direccion = $dom->createElement('direccion');
	$direccion->appendChild($dom->createTextNode($tomadorPersona->getAddressReserva()));
	$tomador->appendChild($direccion);
	
	$ciudad = $dom->createElement('ciudad');
	$ciudad->appendChild($dom->createTextNode($tomadorPersona->getLocalidadReserva()));
	$tomador->appendChild($ciudad);
	
	$cp = $dom->createElement('cp');
	$cp->appendChild($dom->createTextNode($tomadorPersona->getCodigopostalReserva()));
	$tomador->appendChild($cp);
	
	$pais = $dom->createElement('pais');
	$pais->appendChild($dom->createTextNode($tomadorPersona->getPaisReserva()));
	$tomador->appendChild($pais);
	
	$idioma = $dom->createElement('idioma');
	$idioma->appendChild($dom->createTextNode(ViviendaAlquiler::getBestAttisSeguroLanguage(sfContext::getInstance()->getUser()->getLangCulture())));
	$tomador->appendChild($idioma);
	
	$email = $dom->createElement('email');
	$email->appendChild($dom->createTextNode($tomadorPersona->getEmailReserva()));
	$tomador->appendChild($email);
	
	$telefono = $dom->createElement('telefono');
	$telefono->appendChild($dom->createTextNode($tomadorPersona->getTelefono1Reserva()));
	$tomador->appendChild($telefono);
	
	$nif = $dom->createElement('nif');
	$nif->appendChild($dom->createTextNode($tomadorPersona->getDnipasaporteReserva()));
	$tomador->appendChild($nif);
	
	$estancia = $dom->createElement('estancia');
	$reserva->appendChild($estancia);
	
	$fecha_ini = $dom->createElement('fecha_ini');
	$fecha_ini->appendChild($dom->createTextNode($reservaAlquiler->getAlquileresPrecios()->getFirst()->getFechaInicio()));
	$estancia->appendChild($fecha_ini);
	
	$fecha_fin = $dom->createElement('fecha_fin');
	$fecha_fin->appendChild($dom->createTextNode($reservaAlquiler->getAlquileresPrecios()->getLast()->getFechaFin()));
	$estancia->appendChild($fecha_fin);
	
	$destino = $dom->createElement('destino');
	$destino->appendChild($dom->createTextNode($reservaAlquiler->getViviendasAlquileres()->getZonas()->getLocalidades()->getLocalidad()));
	$estancia->appendChild($destino);
	
	$pais_destino = $dom->createElement('pais_destino');
	$pais_destino->appendChild($dom->createTextNode("ES"));
	$estancia->appendChild($pais_destino);
	
	$num_personas = $dom->createElement('num_personas');
	$num_personas->appendChild($dom->createTextNode($reservaAlquiler->getNumBebes() + $reservaAlquiler->getNumNinos() + $reservaAlquiler->getNumAdultos()));
	$estancia->appendChild($num_personas);
	
	$persona_grupo = $dom->createElement('persona_grupo');
	$persona_grupo->appendChild($dom->createTextNode($tomadorPersona->getNombreReserva()." ".$tomadorPersona->getApellidosReserva()));
	$estancia->appendChild($persona_grupo);
	
	$precio = $dom->createElement('precio');
	$precio->appendChild($dom->createTextNode($reservaAlquiler->getPrecioEstrictoAlquiler($reservaAlquiler->getId())*100));
	$estancia->appendChild($precio);
	
	// Flush XML from memory to file in one go
	file_put_contents('/home/gafilter/www/bh2/web/uploads/segurosxml/'.$reservaAlquiler->getDsorder(), $dom->saveXML());
	
	$client->useHTTPPersistentConnection();
	$params = array('usuario'=>$reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPagossegurosOnline()->getTaisuser(),'password'=>$reservaAlquiler->getViviendasAlquileres()->getUsuario()->getPagossegurosOnline()->getTaispassword(),'xmldoc' => file_get_contents('/home/gafilter/www/bh2/web/uploads/segurosxml/'.$reservaAlquiler->getDsorder()));
	$result = $client->call('insurance_add', $params);
	
	// Check for any faults reported by the remote service
	if ($client->fault) {
		$this->logMessage("Error al anadir seguro TAIS fault", "err");
	} else {
		// Check for any errors from the remote service
		$err = $client->getError();
		if ($err) {
			$this->logMessage("Error al anadir seguro TAIS err".$err.$result, "err");
		} else {
			// If everything is OK display the result
			//header('Content-type: text/xml; charset=utf-8');
			$this->logMessage("Mensaje devuelto por TAIS: ".$result, "err");
		}
	}
	//Devuelve el XML a parsear para id y coderror
	return $result;
  }
  
  
  protected function processForm(sfWebRequest $request, sfForm $form, ReservasAlquileres $reservas_alquileres)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid()) //&& $request->getParameter("fase")==1)
    {
		$form->getObject()->setReservaId($reservas_alquileres->getId());
      //Creamos antes la reserva, y despues la reservapersona con reserva_id
	 $reservas_personas = $form->save();
    }
	//Si el formulario no es valido borramos la reserva_alquiler creada anteriormente
	else{
		//Solo borramos si no es nuevo formulario
		if($form->getObject()->isNew())
			$reservas_alquileres->delete();
			$reservas_alquileres = null;
	}
	return $reservas_alquileres;
  }

}